// 字典管理相关API接口
import { get, post, put, del, upload, download } from '../utils/request'

/**
 * 获取字典类型列表
 * @returns {Promise<Object>} 字典类型列表数据
 */
export const getDictionaryTypes = async () => {
  try {
    const response = await get('/dictionaries/types')
    return response.data
  } catch (error) {
    console.error('获取字典类型列表失败:', error)
    throw error
  }
}

/**
 * 获取所有字典
 * @returns {Promise<Object>} 字典数据
 */
export const getAllDictionaries = async () => {
  try {
    const response = await get('/dictionaries')
    return response.data
  } catch (error) {
    console.error('获取所有字典数据失败:', error)
    throw error
  }
}

/**
 * 获取指定类型的字典
 * @param {string} dictType - 字典类型
 * @returns {Promise<Array>} 字典数据
 */
export const getDictionaryByType = async dictType => {
  try {
    const response = await get(`/dictionaries/${dictType}`)
    return response.data
  } catch (error) {
    console.error(`获取${dictType}字典数据失败:`, error)
    throw error
  }
}

/**
 * 搜索字典条目
 * @param {string} dictType - 字典类型
 * @param {string} keyword - 搜索关键词
 * @param {Object} options - 搜索选项
 * @param {number} options.page - 页码（≥1）
 * @param {number} options.pageSize - 每页大小（1-100）
 * @returns {Promise<Object>} 搜索结果 {total, list}
 */
export const searchDictionaryItems = async (dictType, keyword, options = {}) => {
  try {
    const { page = 1, pageSize = 20 } = options
    const params = {
      keyword,
      page,
      pageSize,
    }
    const response = await get(`/dictionaries/${dictType}/search`, params)
    return response.data
  } catch (error) {
    console.error(`搜索${dictType}字典条目失败:`, error)
    throw error
  }
}

/**
 * 添加字典条目（重要变更：使用新的路径格式）
 * @param {string} dictType - 字典类型
 * @param {Object} itemData - 条目数据
 * @param {string} itemData.name - 条目名称
 * @param {string} itemData.batchId - 批次ID
 * @returns {Promise<Object>} 添加结果
 */
export const addDictionaryItem = async (dictType, itemData) => {
  try {
    const response = await post(`/dictionaries/${dictType}/add`, itemData)
    return response.data
  } catch (error) {
    console.error(`添加${dictType}字典条目失败:`, error)
    throw error
  }
}

/**
 * 创建字典条目
 * @param {string} dictType - 字典类型
 * @param {Object} itemData - 条目数据
 * @param {string} itemData.name - 条目名称
 * @param {string} itemData.status - 条目状态（可选，默认"active"）
 * @returns {Promise<Object>} 创建结果
 */
export const createDictionaryItem = async (dictType, itemData) => {
  try {
    const response = await post(`/dictionaries/${dictType}`, itemData)
    return response.data
  } catch (error) {
    console.error(`创建${dictType}字典条目失败:`, error)
    throw error
  }
}

/**
 * 更新字典条目
 * @param {string} dictType - 字典类型
 * @param {string} itemId - 条目ID
 * @param {Object} itemData - 更新的条目数据
 * @param {string} itemData.name - 条目名称（可选）
 * @param {string} itemData.status - 条目状态（可选）
 * @returns {Promise<Object>} 更新结果
 */
export const updateDictionaryItem = async (dictType, itemId, itemData) => {
  try {
    const response = await put(`/dictionaries/${dictType}/${itemId}`, itemData)
    return response.data
  } catch (error) {
    console.error(`更新${dictType}字典条目失败:`, error)
    throw error
  }
}

/**
 * 删除字典条目
 * @param {string} dictType - 字典类型
 * @param {string} itemId - 条目ID
 * @returns {Promise<Object>} 删除结果
 */
export const deleteDictionaryItem = async (dictType, itemId) => {
  try {
    const response = await del(`/dictionaries/${dictType}/${itemId}`)
    return response.data
  } catch (error) {
    console.error(`删除${dictType}字典条目失败:`, error)
    throw error
  }
}

/**
 * 导入字典数据
 * @param {string} dictType - 字典类型
 * @param {File} file - 导入文件（支持文本文件、Excel、CSV 等格式）
 * @returns {Promise<Object>} 导入结果
 */
export const importDictionaryData = async (dictType, file) => {
  try {
    const formData = new FormData()
    formData.append('file', file)
    const response = await upload(`/dictionaries/${dictType}/import`, formData)
    return response.data
  } catch (error) {
    console.error(`导入${dictType}字典数据失败:`, error)
    throw error
  }
}

/**
 * 导出字典数据
 * @param {string} dictType - 字典类型
 * @param {string} format - 导出格式 (text, excel, csv, json)
 * @returns {Promise<void>} 导出结果
 */
export const exportDictionaryData = async (dictType, format = 'text') => {
  try {
    // 获取字典数据
    const response = await get(`/dictionaries/${dictType}/export`, { format })

    if (format === 'text') {
      // 前端直接生成文本文件
      const items = response.data?.items || []
      const content = items.join('\n')

      // 创建文本文件并下载
      const blob = new Blob([content], { type: 'text/plain;charset=utf-8' })
      const downloadUrl = window.URL.createObjectURL(blob)
      const link = document.createElement('a')
      link.href = downloadUrl
      link.download = `${dictType}_dictionary.txt`
      document.body.appendChild(link)
      link.click()
      document.body.removeChild(link)
      window.URL.revokeObjectURL(downloadUrl)
    } else {
      // 其他格式使用原有的下载逻辑
      const filename = `${dictType}_dictionary.${
        format === 'excel' ? 'xlsx' : format === 'csv' ? 'csv' : 'json'
      }`
      await download(`/dictionaries/${dictType}/export`, { format }, filename)
    }
  } catch (error) {
    console.error(`导出${dictType}字典数据失败:`, error)
    throw error
  }
}

// 支持的字典类型常量
export const DICTIONARY_TYPES = {
  CLOTHING_TYPES: 'clothingType',
  COLORS: 'color',
  PATTERNS: 'pattern',
  MATERIALS: 'material',
  SLEEVE_TYPES: 'sleeveType',
  COLLAR_TYPES: 'collarType',
}

// 字典条目状态常量
export const ITEM_STATUS = {
  ACTIVE: 'active',
  INACTIVE: 'inactive',
}
